package tool

import (
	"lsgfish/server/internal/constant"
	"net/http"

	"github.com/gin-gonic/gin"
)

// Response 通用响应结构
// @Description API通用响应结构，包含状态码、消息和数据
type Response struct {
	// 响应状态码，200表示成功
	Code int `json:"code" example:"200"`
	// 响应消息，如成功或错误信息
	Message string `json:"message" example:"操作成功"`
	// 响应数据，可能为任何类型
	Data interface{} `json:"data,omitempty"`
}

// Ret 响应结构体(兼容旧版)
// @Description API响应结构体，兼容旧版，包含状态码、消息和数据
type Ret struct {
	// 响应状态码，200表示成功
	Code int `json:"code" example:"200"`
	// 响应消息，如成功或错误信息
	Message string `json:"message" example:"操作成功"`
	// 响应数据，可能为任何类型
	Data interface{} `json:"data,omitempty"`
}

func Succ(c *gin.Context, msg string, data ...interface{}) {
	var result interface{}
	if len(data) > 0 {
		result = data[0]
	}

	if msg == "" {
		msg = constant.CodeMessage[constant.SUCCESS]
	}

	c.JSON(http.StatusOK, Ret{
		Code:    constant.SUCCESS,
		Message: msg,
		Data:    result,
	})
}

func Err(c *gin.Context, msg string, data ...interface{}) {
	var result interface{}
	if len(data) > 0 {
		result = data[0]
	}

	if msg == "" {
		msg = constant.CodeMessage[constant.BAD_REQUEST]
	}

	c.JSON(http.StatusOK, Ret{
		Code:    constant.INTERNAL_ERROR,
		Message: msg,
		Data:    result,
	})
}

// 自定义错误码
func ErrF(c *gin.Context, code int, msg string, data ...interface{}) {
	var result interface{}
	if len(data) > 0 {
		result = data[0]
	}

	if msg == "" {
		msg = constant.CodeMessage[code]
	}

	c.JSON(http.StatusOK, Ret{
		Code:    code,
		Message: msg,
		Data:    result,
	})
}

func SuccF(c *gin.Context, code int, msg string, data ...interface{}) {
	var result interface{}
	if len(data) > 0 {
		result = data[0]
	}

	if msg == "" {
		msg = constant.CodeMessage[code]
	}

	c.JSON(http.StatusOK, Ret{
		Code:    code,
		Message: msg,
		Data:    result,
	})
}
